iT邦幫忙

2023 iThome 鐵人賽

DAY 3
0
自我挑戰組

PHP 沿途的風景系列 第 3

[Day 03] 說好的 PHP Error Report 呢!

  • 分享至 

  • xImage
  •  

說好的 PHP Error Report 呢!

寫程式期間,遇到 Error Report 是日常瑣事,那些有錯誤卻沒能回報的才是恐怖
緣起於,寫一個 “註冊” 功能,功能細分為:

  • php link mysql
  • php insert data to mysql
  • view mysql data (SELECT * FROM USERS;)

正常來說

✅ php link mysql
✅ php insert data to mysql
✅ view mysql data

就可以結束這個回合了,我蠻好奇 Error_Report 長怎麼樣,那就 key 錯登入設定,例如 root 改為 rot

!!WT...😱 怎麼網頁會是白白的一片,我的echo訊息咧! ((Failed to connect to MySQL:...

$mysqli = new mysqli("localhost","root","","project01");

// Check connection
if ($mysqli -> connect_errno) {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  exit();
}
else{
    echo "link";
}

根據我的 debug 原則:

  1. 排除『php insert data to mysql』和 『view mysql data』
  2. 將功能拆到最小:php link mysql,step by step 依依測試
  3. 連線成功會顯示 link,連線失敗顯示一片空白
  4. google 大神 (關鍵字: PHP Connect MySQL, error reporting..等)
  5. PHP 公開說明書
  6. 搜尋解法的過程中,另外獲得的資訊: php.ini, info.php

有感覺了

info.php 獲得資訊如下 (橘框處是 php.ini 路徑):

這份清單真是無從下手,請出解析這份清單的工具 Xdebug ((怎麼操作? google!

解析結果:

從設定開始

我總覺得我這症頭 (你看到的白是什麼白~ 一片空白) 不是沒有安裝 debug 而造成;比較像是沒有開啟設定檔的錯誤回報!
打開 php.ini,看看是怎麼回事 (開宗名義表示,設定 php 行為的當案):

參考 php.ini的「必要」設定 一文,有以下設定:

  • display_errors

    就是你,原來是這裡要 on
  • error_reporting
    error_reporting = E_ALL & ~E_NOTICE
  • output_buffering
    output_buffering = Off
  • date.timezone
    date.timezone = asia/taipei

其他幾項設定,參考文中所提,自己依自身情況設定,不明瞭的地方依照設定檔提供的網址,會有詳細的說明!
為什麼這些該被開起來的設定沒開呢?! 誰會把產品的 Error 訊息,直接顯示網頁上面? 記得產品上線時,該關的得關一關

錯誤訊息,不在是白白的一片


參考:
php.ini的「必要」設定
PHP Connect to MySQL
Display All PHP Errors: Basic & Advanced Usage
[初探後端] No.2 — 使用 VS Code 開發 PHP 的 Debug 設定與 Composer 套件管理
PHP mysqli connect() Function


上一篇
[Day02] 合併陣列 (+) 補充
下一篇
[Day 04] PHP Composer
系列文
PHP 沿途的風景30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言